/**
 * @file 重新派单缘由配置
 * @author liuying
 * @date 2021-07-30 15:24:11
 */

layui.define(['element', 'layer', 'form', 'zmnOmsSelect', '$http'], function (exports) {
    let $ = layui.$;
    let form = layui.form;
    let $http = layui.$http;
    let layer = layui.layer;
    let zmnOmsSelect = layui.zmnOmsSelect;

    let CONF_BASE_URL = '/conf/distributeReason';


    // 3 的发起人类型是工程师，engineerRedistributeStep 是响应的变量名，以此类推。
    let redistributionStepName = {
        // 系统
        1: "systemRedistributeStep",
        // 工程师
        3: "engineerRedistributeStep"
    }
    /*
         * 验证条件
         * */
    form.verify({
        reasonVerify: function (value) {
            if (!value) {
                return "改派缘由不能为空！";
            }
        },
        platVerify: function (value) {
            if ($('input[name="plat"]:checked').length == 0) {
                return "请选择至少一个适用平台！";
            }
        },
        orderTypeVerify: function (value) {
            if ($('input[name="orderType"]:checked').length == 0) {
                return "请选择至少一个订单类型！";
            }
        },
        applyTypeVerify: function (value) {
            if ($('input[name="applyType"]:checked').length == 0) {
                return "请选择至少一个发起人！";
            }
        }
    });

    /**
     * 隐藏所有流程
     */
    function hideStepElement() {
        $("#redistribute-step").hide()
        $("input[name=applyType]").each(function () {
            $("#redistribute-step-" + $(this).val()).hide()
        });
    }

    /**
     * 系统流程 - 改派方式的【指定改派】禁用与启动
     *
     *   1、选中审核类型为无需审核；【改派方式变为系统改派】，【改派方式禁用指定改派】
     *   2、回显时：如果是无需审核，则【禁用指定改派】
     *
     * @param initialFlag 是否是初始化
     */
    function systemAuditChangeEvent(initialFlag = false) {
        // 如果 auditType 是：0，也就是【无需审核】时。
        let redistributeStepElement = $("#redistribute-step-1");
        let redistributeTypeElement = redistributeStepElement.find("select[class=redistributeType]");
        let auditType = redistributeStepElement.find("select[class=auditType] option:selected").val();

        // 【审核类型】是否为【无需审核】
        const isNoNeedAudit = auditType == 0;

        if (initialFlag) {
            redistributeTypeElement.find("option[value=2]").prop("disabled", isNoNeedAudit)
        } else {

            // 如果选择了指定改派 才切换成系统改派
            if (redistributeTypeElement.val() == 2) {
                redistributeTypeElement.find("option[value=1]").prop("selected", isNoNeedAudit)
            }

            redistributeTypeElement.find("option[value=2]").prop("disabled", isNoNeedAudit)
        }

        form.render('select');
    }

    /**
     * 工程师流程 - 改派方式的【指定改派】禁用与启动
     *
     * 1、当【“无需转单求助”且 “无需审核”】或者 审核人类型不是【无需审核】时，才可以选择【指定改派】，其他情况禁用【指定改派】且改派方式变为【系统改派】。
     * 2、回显时：当【“无需转单求助”且 “无需审核”】或者 审核人类型不是【无需审核】时，才可以选择【指定改派】，其他情况禁用【指定改派】
     *
     * @param initialFlag 是否是初始化
     */
    function engineerAuditChangeEvent(initialFlag = false) {
        let redistributeStepElement = $("#redistribute-step-3");

        const helpType = redistributeStepElement.find("select[class=helpType] option:selected").val();
        const auditType = redistributeStepElement.find("select[class=auditType] option:selected").val()

        // 不能选择指定改派标志
        const canNoChooseDirectFlag = !((helpType == 0 && auditType == 0) || auditType != 0)

        let redistributeTypeElement = redistributeStepElement.find("select[class=redistributeType]");

        if (initialFlag) {
            redistributeTypeElement.find("option[value=2]").prop("disabled", canNoChooseDirectFlag)
        } else {

            // 如果选择了指定改派 才切换成系统改派
            if (redistributeTypeElement.val() == 2) {
                redistributeTypeElement.find("option[value=1]").prop("selected", canNoChooseDirectFlag)
            }

            redistributeTypeElement.find("option[value=2]").prop("disabled", canNoChooseDirectFlag)
        }

        form.render('select');
    }

    /**
     * 初始化页面事件
     */
    function initEvent() {

        // 监听【系统改派流程】的【审核人类型】
        form.on('select(audit-type-1)', function (data) {
            systemAuditChangeEvent();
        })

        // 监听【工程师改派流程】的【审核人类型】
        form.on('select(help-type-3)', function (data) {
            engineerAuditChangeEvent();
        })

        // 监听【工程师改派流程】的【审核人类型】
        form.on('select(audit-type-3)', function (data) {
            engineerAuditChangeEvent();
        })

        // 监听保存按钮
        form.on('submit()', function (data) {
            var url = CONF_BASE_URL + '/save.action';

            let platValues = [];
            let orderTypeValues = [];
            let applyTypeValues = [];

            $('input[name="plat"]:checked').each(function () {
                platValues.push($(this).val());
            });

            $('input[name="orderType"]:checked').each(function () {
                orderTypeValues.push($(this).val());
            });

            $('input[name="applyType"]:checked').each(function () {
                applyTypeValues.push($(this).val());
            });


            // 拿目前选择的申请人类型做循环
            $("input[name=applyType]:checked").each(function () {
                let applyType = $(this).val();

                // “后台运营”不参与组装数据
                if (applyType == 2) {
                    return;
                }

                // 某个流程的DOM元素
                let redistributeStepElement = $("#redistribute-step-" + applyType);
                let redistributeStepArray = {};

                // 获取 某个流程中每个下拉框的值
                redistributeStepElement.find("select").each(function () {
                    // 某一个下拉框的名称
                    let stepName = $(this).attr("class");
                    // 某一个下拉框的值
                    redistributeStepArray[stepName] = $(this).find("option:selected").val()
                })
                // 将对应的流程转为json字符串，赋值。
                data.field[redistributionStepName[applyType]] = JSON.stringify(redistributeStepArray)
            })


            data.field.plat = platValues.join(',');
            data.field.orderType = orderTypeValues.join(',');
            data.field.applyType = applyTypeValues.join(',');
            console.log("保存数据：", data.field)
            $http.lockSave(url, data.field, data.elem).then(function (rsp) {
                layer.msg('操作成功', {icon: 1, time: 1000}, function () {
                    parent.layer.closeAll();
                });
            }, (msg) => {
                layer.msg(msg);
            });
            return false
        });

        /**
         * 监听“发起人”复选框
         */
        form.on('checkbox(applyType)', function (obj) {
            // 隐藏所有的 流程 DOM元素
            hideStepElement()

            let checkedElement = $("input[name=applyType]:checked");
            if (checkedElement.length > 0) {
                $("#redistribute-step").show()
            }

            // 展示流程
            checkedElement.each(function () {
                $("#redistribute-step-" + $(this).val()).show()
            })

        });
    }

    /**
     * 初始化页面
     */
    function initPage() {

        // 拿目前选择的申请人类型做循环
        $("input[name=applyType]").each(function () {
            let applyType = $(this).val();

            // 某个流程的DOM元素
            let redistributeStepElement = $("#redistribute-step-" + applyType);

            if (applyType == 2) {
                // 如果包含“运营后台”就展示出“指定改派”这几个字
                if (dataVo.applyType && dataVo.applyType.indexOf(applyType) >= 0) {
                    redistributeStepElement.show();
                    $("#redistribute-step").show();
                }
                return;
            }

            // 回显流程下拉框数据
            let redistributeStepConf = dataVo[redistributionStepName[applyType]];

            // 只回显有【流程数据】的配置
            if (redistributeStepConf == null
                || Object.values(redistributeStepConf).some(value => value == null)) {
                return;
            }

            // 每个下拉框
            redistributeStepElement.find("select").each(function () {
                let stepName = $(this).attr("class");

                // 下拉框的每一项
                $(this).find("option").each(function () {
                    if (redistributeStepConf[stepName] == $(this).val()) {
                        // 找到了对应的选项
                        $(this).attr("selected", true)
                        return false;
                    }
                })
            })

            // 展示
            form.render('select');
            redistributeStepElement.show();
            $("#redistribute-step").show();
        })

        // 系统的改派
        systemAuditChangeEvent(true);

        // 工程师的改派
        engineerAuditChangeEvent(true)
    }

    function init() {
        initPage();

        initEvent();
    }

    init();
    exports('oms_conf_distributereason_detail');
});
